home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 21 / AACD 21.iso / AACD / Games / JST / sources / src / loaders / Syndicate / SyndicateHD.asm < prev   
Encoding:
Assembly Source File  |  2001-03-19  |  2.6 KB  |  167 lines

  1. ; *** Syndicate HD loader v1.0
  2. ; *** Written by Jean-François Fabre
  3.  
  4.     include  "syslibs.i"
  5.     include  "jst.i"
  6.  
  7.     HD_PARAMS   "",0,0
  8.  
  9. loader:
  10.     move.l   #$100000,D0
  11.     JSRABS   AllocExtMem
  12.  
  13.     Mac_printf  "Syndicate HD Loader v1.0"
  14.     Mac_printf  "Coded by Jean-François Fabre © 2000"
  15.  
  16.  
  17.     TESTFILE    introfile
  18.     tst.l    D0
  19.     bne    FileErr
  20.     TESTFILE    mainfile
  21.     tst.l    D0
  22.     bne    FileErr
  23.  
  24.     JSRABS    UseHarryOSEmu
  25.  
  26.     move.l    #10000,D0
  27.     JSRABS    LoadSmallFiles
  28.  
  29.     moveq.l    #0,D0
  30.     move.l    #CACRF_CopyBack,D1
  31.     JSRABS    Degrade
  32.  
  33.     GO_SUPERVISOR
  34.     SAVE_OSDATA    $100000
  35.  
  36.     move.w    #0,SR
  37.  
  38.     lea    introfile(pc),A0
  39.     bsr    LoadExecutable
  40.     JSRGEN    FlushCachesHard
  41.     JSR    (A1)
  42.  
  43.     JSRGEN    BlackScreen
  44.     move.l    #-2,$100.W
  45.     move.l    #$100,$DFF080
  46.     JSRGEN    BlackScreen
  47.  
  48.     bsr    UnloadExecutable
  49.  
  50.     lea    mainfile(pc),A0
  51.     bsr    LoadExecutable
  52.     STORE_REGS
  53.     
  54.     move.l    A1,A3
  55.  
  56.     ; remove VBR shit
  57.  
  58.     move.l    A3,A0
  59.     move.l    A3,A1
  60.     add.l    #$20000,A1
  61.     move.l    #$4E7A1801,D0
  62.     move.l    #$72004E71,D1
  63.     JSRGEN    HexReplaceLong
  64.  
  65.     ; install quit key
  66.  
  67.     move.l    A3,A0
  68.     move.l    A3,A1
  69.     add.l    #$20000,A1
  70.     
  71.     lea    .quitkey(pc),A2
  72.     move.l    #10,D0
  73.     JSRGEN    HexSearch
  74.     cmp.l    #0,A0
  75.     beq.b    .skip
  76.     PATCHUSRJSR    (A0),KbInt
  77. .skip
  78.     RESTORE_REGS
  79.     JSRGEN    FlushCachesHard
  80.     JSR    (A1)
  81. .loop
  82.     JSRGEN    InGameExit
  83.     bra    .loop
  84.  
  85. .quitkey:
  86.     dc.w    $137C,0,$0C00,$137C,$0077
  87.  
  88. KbInt:
  89.     move.b    #0,($C00,A1)
  90.     STORE_REGS    D0
  91.     ror.b    #1,D0
  92.     not.b    D0
  93.     cmp.b    #$5D,D0
  94.     bne.b    .noquit
  95.     JSRGEN    InGameExit
  96. .noquit
  97.     RESTORE_REGS    D0
  98.     rts
  99. MemErr:
  100.     Mac_printf    "** Not enough memory to run Syndicate!"
  101.     JMPABS        CloseAll
  102.  
  103.  
  104. ; loads an executable by calling OSEmu LoadSeg()
  105. ;
  106. ; < A0: name of the executable
  107. ; > A1: start address (do a JSR (a1) to start the program)
  108. ; > A0: pointers on arguments
  109. ; > D0: argument string length
  110. ;
  111. ; ** no checks are done there so be careful **
  112.  
  113. LoadExecutable:
  114.     movem.l    A2-A6/D1-D7,-(A7)
  115.     move.l    A0,-(A7)
  116.     MOVE.L    $4.W,A6            ;OPEN DOSLIB FOR USE (THE EMU
  117.     MOVEQ.L    #0,D0            ;PROVIDES THE FUNCTIONS)
  118.     LEA    dosname(PC),A1
  119.     JSRLIB    OpenLibrary
  120.     RELOC_MOVEL    D0,dosbase
  121.     MOVE.L    D0,A6
  122.     move.l    (A7)+,A0
  123.  
  124.     MOVE.L    A0,D1
  125.     JSRLIB    LoadSeg
  126.     RELOC_MOVEL    D0,loaderseg
  127.  
  128.     LSL.L    #2,D0
  129.     MOVE.L    D0,A1
  130.     ADDQ.L    #4,A1
  131.  
  132.     lea    progargs(pc),A0
  133.     move.l    A0,D0
  134.     JSRGEN    StrlenAsm    ; arguments length
  135.  
  136.     movem.l    (A7)+,A2-A6/D1-D7
  137.     rts
  138.  
  139. ; unloads previously loaded executable
  140.  
  141. UnloadExecutable:
  142.     STORE_REGS
  143.     move.l    dosbase(pc),A6
  144.     move.l    loaderseg(pc),D1
  145.     JSRLIB    UnLoadSeg
  146.     RESTORE_REGS
  147.     rts
  148.  
  149. FileErr:
  150.     Mac_printf    "** Cannot find file 'intro' and/or 'syn'"
  151.     JMPABS    CloseAll
  152.  
  153. loaderseg:
  154.     dc.l    0
  155. dosbase:
  156.     dc.l    0
  157. progargs:
  158.     ; your arguments here (ex: dc.b "/f data1")
  159.     dc.b    "\q",10,0        ; linefeed + null termination
  160. dosname:
  161.     dc.b    "dos.library",0
  162.  
  163. mainfile:
  164.     dc.b    "syn",0
  165. introfile:
  166.     dc.b    "intro",0
  167.